if (clip_region)
cairo_region_destroy (clip_region);
}
-
-/**
- * gdk_cairo_surface_upload_to_gl:
- * @surface: a Cairo surface
- * @target: a GL texture target
- * @width: the width of the texture @target
- * @height: the height of the texture @target
- * @context: (nullable): a #GdkGLContext, or %NULL to use the currently
- * bound context
- *
- * Uploads the contents of a Cairo @surface to a GL texture @target.
- */
-void
-gdk_cairo_surface_upload_to_gl (cairo_surface_t *surface,
- int target,
- int width,
- int height,
- GdkGLContext *context)
-{
- cairo_rectangle_int_t rect;
- cairo_surface_t *tmp;
- double device_x_offset, device_y_offset;
-
- g_return_if_fail (surface != NULL);
- g_return_if_fail (context == NULL || GDK_IS_GL_CONTEXT (context));
-
- if (context == NULL)
- context = gdk_gl_context_get_current ();
-
- cairo_surface_flush (surface);
-
- cairo_surface_get_device_offset (surface, &device_x_offset, &device_y_offset);
-
- rect.x = (int) device_x_offset;
- rect.y = (int) device_y_offset;
- rect.width = width;
- rect.height = height;
- tmp = cairo_surface_map_to_image (surface, &rect);
-
- gdk_gl_context_upload_texture (context,
- cairo_image_surface_get_data (tmp),
- rect.width,
- rect.height,
- cairo_image_surface_get_stride (tmp),
- GDK_MEMORY_DEFAULT,
- target);
-
- cairo_surface_unmap_image (surface, tmp);
-}